package cool.taomu.toolkit.platform.service

import com.google.gson.Gson
import cool.taomu.toolkit.service.kademlia.entity.RequestDto
import java.util.List
import javax.inject.Inject
import redis.clients.jedis.Jedis
import redis.clients.jedis.JedisPool
import cool.taomu.toolkit.service.client.kademlia.service.ServiceClient

class TaskService {

    @Inject
    JedisPool pool
    
    @Inject
    ServiceClient scservice
    
    String queueName = "stock_task_queue"
    
    def execute() {
        try (var Jedis jedis = pool.getResource()) {
            while (true) {
                // 使用 BRPOP 阻塞式地从队列头部弹出消息 (Blocking RPop)
                // 参数 0 表示无限等待，直到有消息到达
                // 也可以设置超时时间 (秒)
                var List <String> response = jedis.brpop(0, queueName);

                if (response !== null && response.size() == 2) {
                    // BRPOP 返回一个包含 [key, value] 的列表
                    var String queue = response.get(0);
                    var String message = response.get(1);
                    System.out.println("收到消息: '" + message + "' 来自队列: " + queue);

                    // --- 处理消息的业务逻辑 ---
                    // 例如：解析 JSON, 更新数据库, 调用 API 等
                    processMessage(message);
                }
            }
        } catch (InterruptedException e) {
            System.out.println("消费者被中断。");
            Thread.currentThread().interrupt(); // 重置中断状态
        } catch (Exception e) {
            System.err.println("消费消息时出错: " + e.getMessage());
            e.printStackTrace();
        // 可以选择重试或记录错误
        }
    }
    
    def processMessage(String string) {
        var dto = new Gson().fromJson(string,RequestDto)
        scservice.execute(dto);
    }

}
